package com.kfm.ex;

import java.security.spec.ECField;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo04 {

    public static void main(String[] args) {
        // test();
        // try {
        //     test2();
        // } catch (ArithmeticException e) {
        //     System.out.println("发生了数学异常");
        //     e.printStackTrace();
        // }
        // try {
        //     test3();
        // } catch (ParseException e) {
        //     System.out.println("转换异常");
        //     e.printStackTrace();
        // }
        // System.out.println("hello，哈尔滨");
        // try {
        //     rental(6);
        // } catch (RuntimeException e) {
        //     System.out.println("再租一辆车");
        //     e.printStackTrace();
        // }
        expense(5001);
        System.out.println("hello，哈尔滨");
    }

    public static void test() {
        int i = 0;
        int j = 1;
        // 多重catch()注意书写的顺序  从小往大的写 先子后父类
        // 捕获顺序从上往下
        // try{}catch(异常类型 e) {} catch(异常类型2 e) {} finally{}
        try {
            System.out.println(j / i);
            System.out.println(Integer.valueOf("abc"));
        } catch (ArithmeticException e) {
            // 迟到的异常
            System.out.println("发生了数学异常");
            e.printStackTrace();
        } catch (Exception e) {
            // 生病的异常
            System.out.println("数字转换异常");
            e.printStackTrace();
        } finally {
            System.out.println("其余代码");
        }
    }

    public static void test2() throws ArithmeticException {
        int i = 0;
        int j = 1;
        // 多重catch()注意书写的顺序  从小往大的写 先子后父类
        // 捕获顺序从上往下
        // try{}catch(异常类型 e) {} catch(异常类型2 e) {} finally{}
        System.out.println(j / i);
        System.out.println(Integer.valueOf("abc"));
    }

    public static void test3() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 这个异常必须要处理
        Date parse = sdf.parse("2023-12-30");
        System.out.println(parse);
    }

    public static void rental(int n) {
        if (n > 5) {
            throw new RuntimeException("租车人数不能超过5人");
        }
        System.out.println("租车成功");
    }
    // throws throw
    // throws 异常的类型 表示抛出异常到方法的调用处，调用处可以处理也可以不处理 （取决于异常类型）
    // throw 异常的对象 表示主动触发一个异常，方法内部可以处理也可以不处理 （取决于异常类型）
        // 如果触发的是编译时异常 处理方式 try-catch throws

    public static void expense(int n)  {
        try {
            if (n > 5000) {
                Exception e = new Exception("资金不足");
                System.out.println(e.getMessage());
                throw e;
            }
        } catch (Exception e) {
            System.out.println("找个银行贷点钱");
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
        System.out.println("消费成功");
    }
}
